package com.lndsnx.jedis.spring;

import com.lndsnx.common.model.entity.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;

@Slf4j
@Service
public class JedisServiceImpl {

    @Resource
    private JedisUtils jedisUtils;

    /**
     * 测试String
     * 根据key 查询value值
     */
    public String getString(String key) {
        Jedis jedis = jedisUtils.getJedis();
        String val = null;
        if (!jedis.exists(key)) {
            val = "南京";
            log.info(key + "在MYSQL数据库中进行查询的结果是：" + val);
            jedis.set(key, val);
            log.info(key + "存入Redis中。值是：" + val);

        } else {
            val = jedis.get(key);
            log.info(key + "是在Redis中查询的数据。值是：" + val);
        }
        // 释放资源
        jedisUtils.close(jedis);
        return val;
    }

    /**
     * 测试 jedis 操作hash类型
     * 根据用户ID查询用户信息
     * 先判断Redis中是否存在，
     * 如果不存在，数据库中查询。并存到Redis中
     * 如果存在，直接查询Redis 并返回
     */
    public User selectBy(Long id) {
        // 根据规则生成相同规范的key
        String key = "user:id";
        User user = new User();
        ;
        Jedis jedis = jedisUtils.getJedis();
        if (!jedis.exists(key)) {
            //数据库中查询，并进行存
            user.setId(id);
            user.setName("JAVA");
            user.setAge(20);
            log.info("数据库中查询的用户信息是：" + user);

            Map<String, String> map = new HashMap<>();
            map.put("id", user.getId().toString());
            map.put("name", user.getName());
            jedis.hmset(key, map);
            log.info(key + "成功存入Redis:" + user);
        } else {
            Map<String, String> map = jedis.hgetAll(key);
            user.setId(Long.valueOf(map.get("id")));
            user.setName(map.get("name"));
            log.info(key + "Redis中查询出来的是:" + map);
        }
        jedisUtils.close(jedis);

        return user;
    }
}
